﻿/**
* Основной корневой файл скриптов админской панели
*/

/**
* Основная панель администрирования в главном пространстве имен
*/
Ext.onReady(function () {
    Ext.QuickTips.init();

    Ext.controlPanel = new Ext.Viewport({
        title: 'Панель управления сайтом',
        id: 'adminPanel',
        layout: 'border',
        items: [
            {
                xtype: 'treepanel',
                region: 'west',
                width: 300,
                title: 'Панель навигации',
                loader: new Ext.tree.TreeLoader({
                    url: '/ControlPanel/Root/GetNavMenu'
                }),
                root: new Ext.tree.AsyncTreeNode({
                    text: 'Корень навигации',
                    id: -1,
                    expanded: true
                }),
                rootVisible: true,
                animate: true,
                autoScroll: true,
                listeners: {
                    click: function(node) {
                        if (node.attributes.objectType != "section") {
                            return;
                        }
                        var tabPanel = Ext.getCmp('tabPanel');
                        var searchTab = null, tabIndex = -1;
                        for (var i = 0; i < tabPanel.items.getCount(); i++) {
                            var tab = tabPanel.items.get(i);
                            if (tab.name == node.id) {
                                searchTab = tab;
                                tabIndex = i;
                                break;
                            }
                        }
                        if (searchTab != null) {
                            tabPanel.setActiveTab(tabIndex);
                            return;
                        }
                        searchTab = {
                            xtype: 'panel',
                            title: node.text,
                            id: node.id,
                            closable: true,
                            tabTip: node.qtip,
                            layout: 'fit',
                            autoLoad: { url: node.attributes.url, scripts: true }
                        };
                        tabPanel.add(searchTab).show();
                    }
                }
            },
            {
                xtype: 'tabpanel',
                id: 'tabPanel',
                region: 'center'
            },
            {
                xtype: 'propertygrid',
                title: 'Настройки системы',
                region: 'east',
                id: 'systemPropertiesGrid',
                width: 300,
                autoScroll: true,
                collapsible: true,
                split: true,
                collapsed: true,
                source: { },
                listeners: {
                    propertychange: function(source, recordId, newValue, oldValue) {
                        if (newValue == oldValue) {
                            return;
                        }
                        var grid = Ext.getCmp('systemPropertiesGrid');
                        grid.el.mask("Идет сохранение измененной настройки", "x-mask-loading");
                        Ext.Ajax.request({
                            url: '/ControlPanel/ManageSettings/Save',
                            params: { key: recordId, newValue: newValue },
                            success: function(response, request) {
                                var data = Ext.util.JSON.decode(response.responseText);
                                grid.el.unmask();
                                if (data.result == "success") {

                                } else if (data.result == "errors") {
                                    Ext.Msg.alert('Ошибка на сервере', data.message);
                                }
                            },
                            failure: function(response, request) {
                                var data = Ext.util.JSON.decode(response.responseText);
                                grid.el.unmask();
                                Ext.Msg.alert('Ошибка', 'В ходе выполнения AJAX запроса возникла ошибка: ' + data.message);
                            },
                            method: 'POST'
                        });
                    }
                },
                tbar: [
                    {
                        text: 'Обновить',
                        handler: function() {
                            reloadSettings();
                        }
                    }
                ]
            }
        ],
        renderTo: Ext.getBody()
    });
    reloadSettings();

    /**
    * Функция обновляющая коллекцию свойств в гриде
    */
    function reloadSettings() {
        var grid = Ext.getCmp('systemPropertiesGrid');
        grid.el.mask("Идет загрузка настроек", "x-mask-loading");
        Ext.Ajax.request({
            url: '/ControlPanel/ManageSettings/Load',
            params: { id: 0 },
            success: function (response, request) {
                var data = Ext.util.JSON.decode(response.responseText);
                grid.el.unmask();
                if (data.result == "success") {
                    grid.setSource(data.settings);
                } else if (data.result == "errors") {
                    Ext.Msg.alert('Ошибка на сервере', data.message);
                }
            },
            failure: function (response, request) {
                var data = Ext.util.JSON.decode(response.responseText);
                grid.el.unmask();
                Ext.Msg.alert('Ошибка', 'В ходе выполнения AJAX запроса возникла ошибка: ' + data.message);
            },
            method: 'POST'
        });
    }
});